package demo.thread;

/**
 * @Author: tyzhang
 * @Description: 共同的资源
 * <p>
 * flag ->F 生产者等待，消费者消费  消费完成后通知生产者生产
 * <p>
 * flag ->T 消费者等待，生产者生产  生产完成后通知消费者消费
 * @Date: Created in 23:35 2018/3/13
 */
public class Movie {
    private String pic;
    private Boolean flag=true;


    /**
     * @param pic
     */
    public synchronized void play(String pic) {
        if (!flag) {  //生产者等待
            try {
                this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        //开始生产
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("生产了"+pic);
        this.pic = pic;
        //唤醒消费者（通知消费者）
        this.notify();  //notify（通知一个）和notifyAll（通知所有）的区别在于通知的数量上

        //停止生产
        this.flag = false;
    }

    public synchronized void watch() {
        if (flag) {  //等待消费
            try {
                this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        //开始消费
        try {
            Thread.sleep(200);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("消费了"+pic);
        //唤醒生产者（通知生产者）
        this.notifyAll();
        //消费者等待
        this.flag = true;
    }
}
